import java.util.concurrent.ConcurrentHashMap;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: mac
 * Date: 2022-10-27
 * Time: 15:08
 */
public class MyHashSet {
    //387.字符串中唯一字符
    public int firstUniqChar(String s) {
        int[] array = new int[26];
        char[] ret = s.toCharArray();
        for (int i = 0; i < ret.length; i++) {
            array[ret[i] - 97]++;
        }

        for (int i = 0; i < ret.length; i++) {
            if (array[ret[i] - 97] == 1){
                return i;
            }
        }
        return -1;
    }

    //1.哈希函数的设计 - ppt

    //2.调节负载因子 - 存储散列表的元素个数 / 散列表长度
    //负载因子越长，哈希冲突率越高，可通过提高散列表长度来降低冲突率

    //解决哈希冲突 - 闭散列(开放地址法)

    //寻找下一个为空的位置
    //1.线性探测法 +1 +1 +1 - 会把冲突的元素都放到一起(扎堆)


    //2.二次探测 +1 -1 +2 -2 +4 -4


    //解决哈希冲突 - 开散列（链地址法 - 哈希桶）
    //数组+链表
    //链表不会很长控制在常数范围（负载因子控制）
    //jdk1.8开始，当链表的长度超过8，这个链表就会变成红黑树，但是链表长度超过64

    //HashMap 线程不安全的
    //ConcurrentHashMap 线程安全的

}
